#include <stdio.h>
// s = 1 + 2 + 3 + 4 + 5 + ... + 100;
int main1()
{
    int s, i;
    s = 0;
    i = 0;
    while (i < 100)
        s += ++i;          // 等价于 i++; s = s + i;
    printf("s = %d\n", s); // s = 1,3,6...
    return 0;
}

// 100 个数相加
int main2()
{
    int s = 0, i = 0;
    // do...while 循环：
    // 先执行一次再去判断条件，也就是说不管满不满足条件，都会先执行一次，执行次数最少1次
    do
    {
        i++;
        s = s + i;
    } while (i < 100);
    printf("s = %d\n", s); // i=0: s=5050,  i=100: s=101

    s = 0;
    i = 0;
    // while 循环：
    // 必须先判断条件，满足了才执行，最少执行次数0次。
    while (i < 100)
    {
        i++;
        s = s + i;
    }
    printf("s = %d\n", s); // i=0: s=5050,  i=100: s=0
    return 0;
}

/*
while 语句：
“初始化计数器”
while (“循环条件”) {
    “循环体”
    “更新计数器”
}

for 语句：
for (表达式1“初始化计数器”; 表达式2“循环条件”; 表达式3“更新计数器”) {
    “循环体”
}
表达式1和表达式3可以是一个简单的表达式，也可以是逗号表达式。
*/
int main()
{
    int s = 0, i = 0;
    // for() 可以省略部分字段，由内部处理
    for (; i < 100;)
    {
        i++;
        s = s + i;
    }
    printf("s = %d\n", s); // 5050

    // 表达式1是逗号表达式(用逗号分隔多个表达式)
    // 在 C99 的新标准中允许在 for 语句的表达式 1 中定义变量 (使用 gcc 进行编译的时候需要加上 –std=c99 )
    for (s = 0, i = 1; i <= 100; i++)
        s += i; // i++ 也可以移下来： s += i++;
    printf("s = %d\n", s); // 5050
    return 0;
}